'1.6.2af2455', 'sponsors' => '1.0.9388', 'events' => '1.0.9400', 'clubs' => '1.0.6399', 'guestbook' => '1.0.9283', ); ?> $elemValue) { if (is_object($elemValue) && method_exists($elemValue, * 'toArray')) $array[$elemName]=$elemValue->toArray(); else * $array[$elemName]=$elemValue; } return $array; } */ public function __construct() { parent::__construct(array(), true); } public function organize($module, $controller) { if ($module == 'manager' || $module == 'default') { $module = 'quilium'; } /* * print_r(array($module,$controller)); die; */ // create a shortcut to vars. // ex: $this->lng->myVar will return // $this->lng->$module->$controller->myVar foreach ($this->$module->$controller as $elemName => $elemValue) { if (empty($this->$elemName)) { $this->$elemName = $elemValue; } } $this->manager = $this->quilium; } } class Plugin_SetupI18n extends Zend_Controller_Plugin_Abstract { protected $queryLanguage = false; protected $allLanguages = false; protected $locales = false; public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) { $registry = Zend_Registry::getInstance(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer'); if (APPLICATION_DEFAULT_MODULE == APPLICATION_BACKEND_MODULE) { // backend // lang cannot be in parametter. so it's the default (defined) // language $lang = $registry->settings->defaultBackendLanguage; $interface = 'backend'; } else { // frontend // lang can be either in a param, or default $allowedLanguages = array_keys($registry->settings->allLanguages->ToArray()); $model_config = Model_Factory::getInstance('Config'); $config = $model_config->fetch(); $defaultLang = $registry->settings->defaultFrontendLanguage; foreach ($allowedLanguages as $key => $lang) { if ($config['config_i18n'][$lang]['language_active'] != 1) { unset($allowedLanguages[$key]); /* * if($key==$lang) $defaultLang=null; */ } } if ($defaultLang == null) { foreach ($allowedLanguages as $lang) { $defaultLang = $lang; } } $lang = null; $queryLang = $request->getParam('lang'); $geoIpLang = $this->apacheGeoIP(); // if(count($allowedLanguages)==1) if (! empty($queryLang) && in_array($queryLang, $allowedLanguages)) { // if valid (allowed) lang in params, take it $lang = $queryLang; // add browser language here } elseif (in_array($geoIpLang, $allowedLanguages)) { // if goeip valid $lang = $geoIpLang; } elseif(!is_null($registry->settings->langAutoRedirect) && !$registry->settings->langAutoRedirect) { $lang = $defaultLang; } else { $acceptLanguages = $this->getAcceptLanguages($request); foreach ($acceptLanguages as $acceptLanguage) { if (in_array($acceptLanguage, $allowedLanguages)) { $lang = $acceptLanguage; break; } } if (empty($lang)) { $lang = $defaultLang; } } $interface = 'frontend'; } // get lang file for each module $cache_id = "Lang_" . $interface . "_" . $lang; if ((! $lang_ini = $registry->cache->load($cache_id))) { $helper_modules = Model_Factory::getInstance('Modules'); $modules = $helper_modules->getModules(true); $lang_ini = new LanguageFile(); // Load manager (default quilium) lang file try { $lang_ini->quilium = new Zend_Config_Ini( APPLICATION_ROOT . '/application/manager/lang/' . $interface . '/' . $lang . '.ini', null, array('allowModifications' => true)); } catch (Zend_Exception $e) { $lang_ini->quilium = new LanguageFile(); } try { $common = new Zend_Config_Ini( APPLICATION_ROOT . '/application/manager/lang/common/' . $lang . '.ini', null, array('allowModifications' => true)); $this->replaceRecursive($lang_ini->quilium, $common); } catch (Exception $e) {} try { // adding (and overwriting) custom language file if (file_exists(APPLICATION_ROOT . '/public/themes/' . $registry->settings->theme . '/lang/' . $lang . '.ini')) { $custom = new Zend_Config_Ini( APPLICATION_ROOT . '/public/themes/' . $registry->settings->theme . '/lang/' . $lang . '.ini', null, array('allowModifications' => true)); $this->replaceRecursive($lang_ini->quilium, $custom); } } catch (Zend_Exception $e) { // default don't have custom lang file } // Load modules foreach ($modules as $module => $moduleName) { try { $lang_ini->$module = new Zend_Config_Ini( APPLICATION_PATH . '/' . $module . '/lang/' . $interface . '/' . $lang . '.ini', null, array('allowModifications' => true)); // adding _content_element in default(quilium) section foreach ($lang_ini->$module->_content_elements as $key => $value) { if (! $lang_ini->quilium->_content_elements->$key) $lang_ini->quilium->_content_elements->$key = $value; } } catch (Zend_Exception $e) { // module don't have lang file $lang_ini->$module = new LanguageFile(); } try { $common = new Zend_Config_Ini( APPLICATION_PATH . '/' . $module . '/lang/common/' . $lang . '.ini', null, array('allowModifications' => true)); $this->replaceRecursive($lang_ini->$module, $common); } catch (Zend_Exception $e) { // module don't have common lang file } try { // adding (and overwriting) custom language file $custom = new Zend_Config_Ini( APPLICATION_ROOT . '/public/themes/' . $registry->settings->theme . '/lang/' . $module . '/' . $lang . '.ini', null, array('allowModifications' => true)); $this->replaceRecursive($lang_ini->$module, $custom); } catch (Zend_Exception $e) { // module don't have custom lang file } } $registry->cache->save($lang_ini, $cache_id, array($cache_id)); } // set some vars $viewRenderer->view->lng = $lang_ini; $viewRenderer->view->currentLanguage = $lang; $registry->currentLanguage = $lang; $registry->lng = $lang_ini; // Get session variable $session = new Session_Namespace('session'); $session->language = array( 'code' => $lang, 'name' => $registry->settings->allLanguages->$lang, 'locales' => $registry->settings->locales->$lang); $local_tmp = explode(',', $registry->settings->locales->$lang); setlocale(LC_TIME, $local_tmp[0]); } protected function replaceRecursive(&$src, $replace) { if (is_object($replace)) { foreach ($replace as $key => $value) { if (is_object($value) || is_array($value)) { if ($src->$key === null) $src->$key = new LanguageFile(); $this->replaceRecursive($src->$key, $value); } else { $src->$key = $value; } } } elseif (is_array($replace)) { foreach ($replace as $key => $value) { $this->replaceRecursive($src[$key], $value); if (is_array($value)) { $this->replaceRecursive($src[$key], $value); } else { $src[$key] = $value; } } } else { $src = $replace; } } /* * This function requires the geoip apache2 module to be installed! */ protected function apacheGeoIP() { $geoip_code = strtolower($_SERVER['GEOIP_COUNTRY_CODE']); if (! empty($geoip_code) && in_array($geoip_code, array_keys($this->allLanguages))) { return $geoip_code; } } protected function getAcceptLanguages(Zend_Controller_Request_Http $request) { $headerAcceptLanguages = $request->getHeader('Accept-Language'); $acceptLanguages = array(); foreach (explode(';', $headerAcceptLanguages) as $dataAcceptLanguage) { foreach (explode(',', $dataAcceptLanguage) as $availableLanguageFormat) { if (2 == strlen($availableLanguageFormat)) { $acceptLanguages[] = $availableLanguageFormat; } } } return $acceptLanguages; } }